#include<stdio.h>
#include<conio.h>
int canh[50000][2],lab[10001],mark[50001],khop[10002];
long n,m,i;
int getRoot(int x){
    while(lab[x]>0)x=lab[x];
    return x;
}
void setUnion(int x,int y){
    int r=lab[x]+lab[y];
    if(lab[x]>lab[y]){
        lab[y]=x;
        lab[x]=r;
    }else{
        lab[x]=y;
        lab[y]=r;
    }
}
void init(){
    for(i=1;i<=n;i++)lab[i]=-1;
}
void input(){
    scanf("%d%d",&n,&m);
    for(i=0;i<m;i++)
        scanf("%d%d",&canh[i][0],&canh[i][1]);
}
void process(){
    long a,b;
    init();
    for(i=0;i<m;i++){
        a=getRoot(canh[i][0]);
        b=getRoot(canh[i][1]);
        if(a==b)mark[i]=1;
        else setUnion(a,b);
    }
    init();
    for(i=m-2;i>=0;i--){
        a=getRoot(canh[i][0]);
        b=getRoot(canh[i][1]);
        if(a!=b){
            if(mark[i]==0){
                mark[i]=-1;
                khop[canh[i][0]]=1;
                khop[canh[i][1]]=1;
            }
            setUnion(a,b);
        }
    }
}
void output(){
    int c1=0,c2=0;
    for(i=0;i<m;i++)
        if(mark[i]==-1)c1++;
    for(i=1;i<n;i++)
        if(khop[i]==1)c2++;
        
    printf("%d %d",c1,c2);
}
int main(){
    input();
    process();
    output();
    getch();
    return 0;
}
        
        
    
        
